"""
作者：元明
日期：2023年10月30日
"""

'''
练习：
实现学生管理系统：

学生信息包含：
    - 编号（sid), 姓名（name), 年龄（age), 性别（gender) 四个信息
    - 每个学生信息使用字典形式保存
    - 使用列表保存所有学生的信息 

1. 实现菜单函数，输出下列信息，返回用户输入的编号，并进行输入校验。

    print("****************************************")
    print("*				学生管理系统			 *")
    print("*  	    1. 添加新学生信息              *")
    print("* 	    2. 通过学号修改学生信息		 *")
    print("*		3. 通过学号删除学生信息		 *")
    print("*		4. 通过姓名删除学生信息		 *")
    print("* 	    5. 通过学号查询学生信息          *")
    print("*		6. 通过姓名查询学生信息          *")
    print("*		7. 显示所有学生信息             *")
    print("*		8. 退出系统			  		 *")
    print("****************************************")
    select_op = input("输入编号选择操作：")

2. 实现控制函数，用来控制菜单的输出与功能的选择，直到用户选择8，结束程序运行。
3. 实现添加学生函数，函数参数为编号，姓名，年龄，性别四个参数，返回是否添加成功的结果，要求编号不可重复。
4. 实现修改函数，参数为学号，如果学生存在，则进行修改，不存在输出提示，并返回是否修改成功
5. 实现删除函数，参数为学号，如果学生存在，则进行删除，不存在输出提示，并返回是否删除成功
6. 实现删除函数，参数为姓名，如果学生存在，则进行删除（同名学生全部删除），不存在输出提示，并返回是否删除成功
7. 实现查询函数，参数为学号，如果学生存在，则输出学生信息，不存在输出提示，并返回是否查询成功
8. 实现查询函数，参数为姓名，如果学生存在，则输出学生信息（同名学生全部输出），不存在输出提示，并返回是否删除成功
9. 实现函数，输出所有学生信息
'''

# 定义一个全局变量，用来保存学生的信息。供各个函数之间进行访问
students = []


# 添加学生
def addStudent():
    sid = input("请输入学号ID:")
    name = input("强输入学生姓名：")
    for s in students:
        if s["sid"] == sid:
            print("学号已存在，添加失败")
            return "添加失败"
    else:
        student = {"sid": sid, "name": name}
        students.append(student)
        print("添加后的学生列表为:", students)
        print("添加学生成功")
        return "添加成功"


# 通过学号修改学生信息
def modifyStudent_ByID():
    sid = input("请输入学号ID:")
    for s in students:
        if s["sid"] == int(sid):
            name = input("强输入学生姓名：")
            s["name"] = name
            print("通过学号修改学生信息后的学生列表为:", students)
            return "通过学号修改学生信息成功"
    else:
        print("学生ID不存在")
        return "通过学号修改学生信息失败"


# 通过 ID 删除学生信息
def deleteStudent_ByID():
    sid = input("请输入学号ID:")
    for s in students:
        if s["sid"] == int(sid):
            students.remove(s)
            print("删除成功，删除后的学生列表是:", students)
            return "通过学号删除学生信息成功"
    else:
        print(f"没有 {sid}对应的信息")
        return "删除失败"


# 通过学生姓名 删除所有符合的学生
def deleteStudent_ByName():
    name = input("请输入一个学生姓名:")
    exist_s = []
    for s in students:
        if s["name"] == name:
            exist_s.append(s)
    if len(exist_s) > 0:
        for s in exist_s:
            students.remove(s)
            print(f"学号 {s['sid']} 的学生删除成功")
            print("删除后的学生信息为:", students)
        else:
            print(f"成功删除{len(exist_s)}个学生")
            return "删除成功"
    else:
        print("学生不存在，无法删除")
        return "删除失败"


# 通过学号查询学生信息
def queryStudentByID():
    sid = int(input("请输入学号ID:"))
    for s in students:
        if s["sid"] == sid:
            print("查询成功")
            print("查询的学生信息为", s)
            return "查询成功"
    else:
        print(f"学号为{sid}的学生不存在")
        return "查询失败"


# 通过姓名查询学生信息
def queryStudent_ByName():
    name = input("请输入一个学生姓名:")
    list_ = []
    for s in students:
        if s["name"] == name:
            list_.append(s)

    if len(list_) > 0:
        for s in list_:
            print(s)
        print("通过姓名查询出的学生信息为", list_)
        return "查询成功"

    else:
        print(f"姓名为{name}的学生不存在")
        return "查询失败"


# 显示所有学生信息
def show():
    for s in students:
        print(s)


def menu():
    print("****************************************")
    print("*				学生管理系统			 *")
    print("*  	    1. 添加新学生信息              *")
    print("* 	    2. 通过学号修改学生信息		 *")
    print("*		3. 通过学号删除学生信息		 *")
    print("*		4. 通过姓名删除学生信息		 *")
    print("* 	    5. 通过学号查询学生信息          *")
    print("*		6. 通过姓名查询学生信息          *")
    print("*		7. 显示所有学生信息             *")
    print("*		8. 退出系统			  		 *")
    print("****************************************")


# 管理函数
def manager():
    while True:
        menu()
        select_op = input("输入编号选择操作：")

        if len(select_op) == 1 and select_op in "12345678":
            if select_op == "1":
                addStuedent()
            elif select_op == "2":
                modifyStudent_ByID()
            elif select_op == "3":
                deleteStudent_ByID()
            elif select_op == "4":
                deleteStudentByName()
            elif select_op == "5":
                queryStudentByID()
            elif select_op == "6":
                queryStudent_ByName()
            elif select_op == "7":
                show()
            else:
                break

        else:
            print("输入的数据不合法，请输入在合法范围内的操作编号！！！")


if __name__ == '__main__':
    manager()
